package cn.lklink.pay.lkl.request.v3.labs;

import cn.lklink.pay.lkl.core.LakalaPayConfig;
import cn.lklink.pay.lkl.request.ReqData;
import cn.lklink.pay.lkl.request.ReqLocationInfo;
import cn.lklink.pay.lkl.request.v3.labs.accbusifields.ReqAccBusiFields;

/**
 * 主扫交易接口请求报文
 * 交易接口V3.0下支付类接口
 *
 * @author Mr丶xie
 * @version 1.0.0
 * @mail xielinke@lklink.cn
 */
public class PreorderRequest extends ReqData {

    private PreorderRequest() {
    }

    /**
     * 初始化主扫交易接口请求报文
     *
     * @param out_trade_no  商户交易流水号
     * @param account_type  钱包类型
     * @param trans_type    接入方式
     * @param total_amount  金额
     * @param location_info 地址位置信息
     */
    public PreorderRequest(String out_trade_no, String account_type, String trans_type, String total_amount, ReqLocationInfo location_info) {
        this.merchant_no = LakalaPayConfig.MERCHANT_NO;
        this.term_no = LakalaPayConfig.TERM_NO;
        this.out_trade_no = out_trade_no;
        this.account_type = account_type;
        this.trans_type = trans_type;
        this.total_amount = total_amount;
        this.location_info = location_info;
    }

    /**
     * 商户号
     * 拉卡拉分配的商户号
     */
    private String merchant_no;

    /**
     * 终端号
     * 拉卡拉分配的业务终端号
     */
    private String term_no;

    /**
     * 商户交易流水号
     * 商户系统唯一，对应数据库表中外部请求流水号。
     */
    private String out_trade_no;

    /**
     * 钱包类型
     * 微信：WECHAT 支付宝：ALIPAY 银联：UQRCODEPAY 翼支付: BESTPAY
     * 苏宁易付宝: SUNING 拉卡拉支付账户：LKLACC 网联小钱包：NUCSPAY
     */
    private String account_type;

    /**
     * 接入方式
     * 41:NATIVE（（ALIPAY，云闪付支持）
     * 51:JSAPI（微信公众号支付，支付宝服务窗支付，银联JS支付，翼支付JS支付、拉卡拉钱包支付）
     * 71:微信小程序支付
     */
    private String trans_type;

    /**
     * 金额
     * 单位分，整数型字符
     */
    private String total_amount;

    /**
     * 地址位置信息，风控要求必送
     */
    private ReqLocationInfo location_info;

    /**
     * 业务模式： ACQ-收单 不填，默认为“ACQ-收单”
     */
    private String busi_mode;

    /**
     * 订单标题
     * 标题，用于简单描述订单或商品主题，会传递给账户端 （账户端控制，实际最多42个字符），
     * 微信支付必送。
     */
    private String subject;

    /**
     * 支付业务订单号
     * 拉卡拉订单系统订单号，以拉卡拉支付业务订单号为驱动的支付行为，需上传该字段。
     */
    private String pay_order_no;

    /**
     * 商户通知地址
     */
    private String notify_url;

    /**
     * 结算类型
     * “0”或者空，常规结算方式，如需接拉卡拉分账需传“1”；
     */
    private String settle_type;

    /**
     * 备注（非必填）
     */
    private String remark;

    /**
     * 身份信息（非必填）
     * 实名支付信息，json字符串，如{“identityNo”:”32000000000000000X”,”name”:”张三”} ，
     * 然后国密sm2加密
     */
    private String identity_info;
    /**
     * 优惠信息(非必填)
     */
    private String promo_info;

    /**
     * 账户端业务信息域
     */
    private ReqAccBusiFields acc_busi_fields;

    public String getMerchant_no() {
        return merchant_no;
    }

    public void setMerchant_no(String merchant_no) {
        this.merchant_no = merchant_no;
    }

    public String getTerm_no() {
        return term_no;
    }

    public void setTerm_no(String term_no) {
        this.term_no = term_no;
    }

    public String getOut_trade_no() {
        return out_trade_no;
    }

    public void setOut_trade_no(String out_trade_no) {
        this.out_trade_no = out_trade_no;
    }

    public String getAccount_type() {
        return account_type;
    }

    public void setAccount_type(String account_type) {
        this.account_type = account_type;
    }

    public String getTrans_type() {
        return trans_type;
    }

    public void setTrans_type(String trans_type) {
        this.trans_type = trans_type;
    }

    public String getTotal_amount() {
        return total_amount;
    }

    public void setTotal_amount(String total_amount) {
        this.total_amount = total_amount;
    }

    public ReqLocationInfo getLocation_info() {
        return location_info;
    }

    public void setLocation_info(ReqLocationInfo location_info) {
        this.location_info = location_info;
    }

    public String getBusi_mode() {
        return busi_mode;
    }

    public void setBusi_mode(String busi_mode) {
        this.busi_mode = busi_mode;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getPay_order_no() {
        return pay_order_no;
    }

    public void setPay_order_no(String pay_order_no) {
        this.pay_order_no = pay_order_no;
    }

    public String getNotify_url() {
        return notify_url;
    }

    public void setNotify_url(String notify_url) {
        this.notify_url = notify_url;
    }

    public String getSettle_type() {
        return settle_type;
    }

    public void setSettle_type(String settle_type) {
        this.settle_type = settle_type;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public String getIdentity_info() {
        return identity_info;
    }

    public void setIdentity_info(String identity_info) {
        this.identity_info = identity_info;
    }

    public String getPromo_info() {
        return promo_info;
    }

    public void setPromo_info(String promo_info) {
        this.promo_info = promo_info;
    }

    public ReqAccBusiFields getAcc_busi_fields() {
        return acc_busi_fields;
    }

    public void setAcc_busi_fields(ReqAccBusiFields acc_busi_fields) {
        this.acc_busi_fields = acc_busi_fields;
    }
}
